package com.suixuan.support.util.web.validator;

import java.util.regex.Pattern;

import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.validation.Validator;

/**
 * 
 * @Copyright (c) Nanjing Zhou Su co.,Ltd
 * 
 * @Project zhousuframework
 * @Title BaseValidator.java
 * @Package com.suixuan.support.util.web.validator
 * @Description 对控制器中的实体参数进行验证
 * @Author suixuan
 * @Editors 1
 * @Date 2010-11-22 上午08:57:39
 * @Note
 * @Version:1.0.0
 * 
 */
public abstract class BaseValidator implements Validator {
	/**
	 * 邮箱
	 */
	public static final String REGULAR_EMAIL = "^([\\w-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
	/**
	 * Ip
	 */
	public static final String REGULAR_IP = "(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)";
	/**
	 * URL地址
	 */
	public static final String REGULAR_HTTP = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";
	/**
	 * 电话号码
	 */
	public static final String REGULAR_TELHONE = "^(\\d{3,4}-)?\\d{6,8}$";
	/**
	 * 手机号码
	 */
	public static final String REGULAR_HANDSET = "^[1]+[3,5]+\\d{9}$";
	/**
	 * 身份证
	 */
	public static final String REGULAR_IDCARE = "(^\\d{18}$)|(^\\d{15}$)";
	/**
	 * 小数
	 */
	public static final String REGULAR_DECIMAL = "^[0-9]+(.[0-9]{2})?$";
	/**
	 * 数字
	 */
	public static final String REGULAR_NUMBER = "^[0-9]*$";
	/**
	 * 整数
	 */
	public static final String REGULAR_INTEGER_NUMBER = "^\\+?[1-9][0-9]*$";

	/**
	 * 使用正则表达式进行匹配
	 * 
	 * @param regular
	 *            正则
	 * @param input
	 *            匹配的字符
	 * @return True:匹配 False：不匹配
	 */
	protected boolean regularMatcher(String regular, String input) {
		Assert.hasText(regular, "参数 regular 为空");
		Assert.hasText(input, "参数 input 为空");
		return Pattern.compile(regular).matcher(input).matches();
	}

	/**
	 * 
	 * @Title regularMatcherLength
	 * @Description 匹配字符串长度
	 * @param input
	 *            匹配字符
	 * @param min
	 *            最少min长度
	 * @param max
	 *            最大不超过max长度
	 * @return True:匹配 False：不匹配
	 * 
	 */
	protected boolean regularMatcherLength(String input, int min, int max) {
		if (min > max) {
			throw new RuntimeException("参数 min > max");
		}
		Assert.hasText(input, "参数 input 为空");
		int len = input.length();
		if (len < min || max >= len) {
			return false;
		}
		return true;
	}

	/**
	 * 
	 * @Title regularMatcherMin
	 * @Description 匹配最小长度
	 * @param input
	 *            匹配字符
	 * @param min
	 *            最少min长度
	 * @return True:匹配 False：不匹配
	 * 
	 */
	protected boolean regularMatcherMin(String input, int min) {
		Assert.hasText(input, "参数 input 为空");
		if (input.length() < min) {
			return false;
		}
		return true;
	}

	/**
	 * 
	 * @Title regularMatcherMax
	 * @Description 匹配最大长度
	 * @param input
	 *            匹配字符
	 * @param min
	 *            最少max长度
	 * @return True:匹配 False：不匹配
	 * 
	 */
	protected boolean regularMatcherMax(String input, int max) {
		Assert.hasText(input, "参数 input 为空");
		if (input.length() >= max) {
			return false;
		}
		return true;
	}

	/**
	 * 
	 * @Title regularMatcherEmpty
	 * @Description 匹配Null和空字符串
	 * @param input
	 *            匹配字符
	 * @return True:匹配 False：不匹配
	 * 
	 */
	protected boolean regularMatcherEmpty(String input) {
		if (!StringUtils.hasText(input)) {
			return false;
		}
		return true;
	}

	public static void main(String[] args) {

	}
}
